package itsm.isperp.framework.web.request;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

/**
 * DataTables服务器端请求参数的实体bean
 * 
 * @author lizx
 * @date 2013-1-17
 * @version V1.0
 */
public class DataTablesRequest {

	/**
	 * 构造一个默认的请求实体
	 */
	public DataTablesRequest() {

	}

	/**
	 * 指定一个 {@link #javax.servlet.http.HttpServletRequest} 构造 DataTables服务器端请求实体
	 * 
	 * @param request
	 *            HttpServletRequest
	 */
	public DataTablesRequest(HttpServletRequest request) {

		this.iDisplayStart = Integer.parseInt(request
				.getParameter("iDisplayStart"));
		this.iDisplayLength = Integer.parseInt(request
				.getParameter("iDisplayLength"));

		this.sEcho = request.getParameter("sEcho");

		String iColumnsPara = request.getParameter("iColumnsPara");
		if (StringUtils.isNotEmpty(iColumnsPara)) {
			this.iColumns = Integer.parseInt(iColumnsPara);
		}

		this.sSearch = request.getParameter("sSearch");

		String bEscapeRegexPara = request.getParameter("bEscapeRegexPara");
		if (StringUtils.isNotEmpty(bEscapeRegexPara)) {
			this.bEscapeRegex = Boolean.parseBoolean(bEscapeRegexPara);
		}

		Enumeration<?> paramEnu = request.getParameterNames();
		do {
			if (!paramEnu.hasMoreElements())
				break;
			String paramName = (String) paramEnu.nextElement();
			if (paramName.startsWith("bSortable_")) {
				bSortable_.add(Boolean.parseBoolean(request
						.getParameter(paramName)));
			} else if (paramName.startsWith("bSearchable_")) {
				bSearchable_.add(Boolean.parseBoolean(request
						.getParameter(paramName)));
			} else if (paramName.startsWith("sSearch_")) {
				sSearch_.add(request.getParameter(paramName));
			} else if (paramName.startsWith("bEscapeRegex_")) {
				bEscapeRegex_.add(Boolean.parseBoolean(request
						.getParameter(paramName)));
			} else if (paramName.startsWith("iSortCol_")) {
				iSortCol_
						.add(Integer.parseInt(request.getParameter(paramName)));
			} else if (paramName.startsWith("sSortDir_")) {
				sSortDir_.add(request.getParameter(paramName));
			}

		} while (true);

	}

	/**
	 * 显示的起始索引
	 */
	public int iDisplayStart;

	/**
	 * 显示的行数
	 */
	public int iDisplayLength;

	/**
	 * 显示的列数
	 */
	public int iColumns;

	/**
	 * 全局搜索字段
	 */
	public String sSearch;

	/**
	 * 全局搜索是否正则
	 */
	public boolean bEscapeRegex;

	/**
	 * 表示一列是否在客户端被标志位可排序
	 */
	public List<Boolean> bSortable_ = new ArrayList<Boolean>();

	/**
	 * 表示一列是否在客户端被标志位可搜索
	 */
	public List<Boolean> bSearchable_ = new ArrayList<Boolean>();

	/**
	 * 个别列的搜索。 通过字符格式化支持多个查询条件，如sSearch_0,sSearch_1,sSearch_2...
	 */
	public List<String> sSearch_ = new ArrayList<String>();

	/**
	 * 个别列是否使用正则搜索。 通过字符格式化支持多个查询条件，如sSearch_0,sSearch_1,sSearch_2...
	 */
	public List<Boolean> bEscapeRegex_ = new ArrayList<Boolean>();

	/**
	 * 排序的列数
	 */
	public int iSortingCols;

	/**
	 * 被排序的列
	 */
	public List<Integer> iSortCol_ = new ArrayList<Integer>();

	/**
	 * 排序的方向 "desc" 或者 "asc"。默认asc
	 */
	public List<String> sSortDir_ = new ArrayList<String>();

	/**
	 * DataTables 用来生成的信息
	 */
	public String sEcho;

}
